iT邦幫忙

DAY 3
0

實習、專題除錯筆記系列 第 3

實習、專題除錯筆記(三)-- 為什麼用了 Angular 的第三方套件就沒辦法 binding?

  • 分享至 

  • xImage
  •  

問題三 -- 為什麼用了 Angular 的第三方套件就沒辦法 binding ?

在實習的工作上碰到了這個問題,ng-model 名稱沒有任何問題,舉例來說我今天 ng-model 這樣設定 ng-model="name",但是在 Controller 內卻無法抓到他的值,也就是 $scope.name 完全沒有東西,即時使用 $watch 來偵測他的數值也完全沒有數值的變化。

這是因為當改變 primitive 或者物件的值時,會在 child scope 建立一個新的同名稱變數,而非使用原本 parent scope 的變數,在 input 中改變值時,並不會改變到 parent scope 的 name 變數。

我寫了一個簡單的範例以及解決方法給大家看

    <accordion>
      <accordion-group is-open="status.isFirstOpen=true">
        <accordion-heading>測試</accordion-heading>
   <span style="color:#0000CD">     <input type="text" ng-model="name"></span>
        <p>{{test}}</p>
      </accordion-group>
    </accordion>

改成

    <accordion>
      <accordion-group is-open="status.isFirstOpen=true">
        <accordion-heading>測試</accordion-heading>
<span style="color:#FF0000">        <input type="text" ng-model="$parent.$parent.name"></span>
        <p>{{test}}</p>
      </accordion-group>
    </accordion>

預覽

http://plnkr.co/edit/GzxSXdrXtFhE9JHzg1Uw?p=preview

不過這並不是唯一可能的原因,這只是比較常見的問題,還有其他種可能的狀況,請參考同事整理的文章。

http://malikid-ee.blogspot.tw/2014/09/angularjs-scope-issues-when-using.html

#預覽中使用的範例是 ui-bootstrap 的 accordion


上一篇
實習、專題除錯筆記(二)-- $watch 和 ng-change 使用上的建議
下一篇
實習、專題除錯筆記(四)為什麼用 PHP 的 json_encode 總是無法正確的處理中文呢?
系列文
實習、專題除錯筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言